﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SecurityInformation.maHoa
{
    class Playfair
    {
        private String test="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        private char [,]maTrix=new char[5,5];
        private Boolean isExists(char [,]source,char key)
        {
            for(int i=0;i<5;i++)
                for(int j=0;j<5;j++)
                    if(source[i,j]==key)
                        return true;
            return false;
        }
        //xây dựng ma trận khóa
        public void buildMatrix(string key)
        {
            key = key.ToUpper();
            int count = 0;
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 5; j++)
                    maTrix[i,j] = ' ';
            //điền khóa vào ma trận
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    if (count > key.Length - 1)
                        break;
                    maTrix[i,j] = key[count++];
                }
            }
            //điền các kí tự còn lại trong bảng mã m vào ma trận
            //điền các kí tự còn lại
                count=0;
            for(int i=0;i<5;i++)
                for(int j=0;j<5;j++)
                    if(maTrix[i,j]==' ')
                        {
                            for(int k=count;k<test.Length;k++)
                            {
                                if(!isExists(maTrix,test[k]))
                                    {
                                     //trong ma trận khóa không được phép đồng thời tồn tại 2 kí 'I' và 'J'
                                        if(isExists(maTrix,'I')&&test[k]=='J')
                                            k++;
                                        else if(isExists(maTrix,'J')&&test[k]=='I')
                                            k+=2;
                                         maTrix[i,j]=test[k];
                                         count++;
                                         break;
                                       }
                                else
                                    count++;
                              }
                         }
        
              }
        }
}
